home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI2 / LEZIONE5m.s < prev    next >
Text File  |  1994-07-08  |  6KB  |  178 lines

  1.  
  2. ; Lezione5m.s    SPOSTAMENTO DELLA FINESTRA VIDEO CON IL DIWSTART ($dff08e)
  3.  
  4.     SECTION    CiriCop,CODE
  5.  
  6. Inizio:
  7.     move.l    4.w,a6        ; Execbase in a6
  8.     jsr    -$78(a6)    ; Disable - ferma il multitasking
  9.     lea    GfxName(PC),a1    ; Indirizzo del nome della lib da aprire in a1
  10.     jsr    -$198(a6)    ; OpenLibrary
  11.     move.l    d0,GfxBase    ; salvo l'indirizzo base GFX in GfxBase
  12.     move.l    d0,a6
  13.     move.l    $26(a6),OldCop    ; salviamo l'indirizzo della copperlist vecchia
  14.  
  15. ;     PUNTIAMO I NOSTRI BITPLANES
  16.  
  17.     MOVE.L    #PIC,d0        ; in d0 mettiamo l'indirizzo della PIC,
  18.     LEA    BPLPOINTERS,A1    ; puntatori nella COPPERLIST
  19.     MOVEQ    #2,D1        ; numero di bitplanes -1 (qua sono 3)
  20. POINTBP:
  21.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  22.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  23.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  24.     swap    d0        ; scambia le 2 word di d0 (es: 3412 > 1234)
  25.     ADD.L    #40*256,d0    ; + lunghezza bitplane -> prossimo bitplane
  26.     addq.w    #8,a1        ; andiamo ai prossimi bplpointers nella COP
  27.     dbra    d1,POINTBP    ; Rifai D1 volte POINTBP (D1=num of bitplanes)
  28. ;
  29.     move.l    #COPPERLIST,$dff080    ; Puntiamo la nostra COP
  30.     move.w    d0,$dff088        ; Facciamo partire la COP
  31.     move.w    #0,$dff1fc        ; Disattiva l'AGA
  32.     move.w    #$c00,$dff106        ; Disattiva l'AGA
  33.  
  34. mouse:
  35.     cmpi.b    #$ff,$dff006    ; Siamo alla linea 255?
  36.     bne.s    mouse        ; Se non ancora, non andare avanti
  37.  
  38.     btst    #2,$dff016    ; se il tasto destro e' premuto salta
  39.     beq.s    Aspetta        ; la routine dello scroll, bloccandolo
  40.  
  41.     bsr.w    SuGiuDIW    ; scorre in alto e in basso col DIWSTART
  42.  
  43. Aspetta:
  44.     cmpi.b    #$ff,$dff006    ; Siamo alla linea 255?
  45.     beq.s    Aspetta        ; Se si, non andare avanti, aspetta!
  46.  
  47.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  48.     bne.s    mouse        ; se no, torna a mouse:
  49.  
  50.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  51.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  52.  
  53.     move.l    4.w,a6
  54.     jsr    -$7e(a6)    ; Enable - riabilita il Multitasking
  55.     move.l    gfxbase(PC),a1    ; Base della libreria da chiudere
  56.     jsr    -$19e(a6)    ; Closelibrary - chiudo la graphics lib
  57.     rts            ; USCITA DAL PROGRAMMA
  58.  
  59. ;    Dati
  60.  
  61. GfxName:
  62.     dc.b    "graphics.library",0,0    
  63.  
  64. GfxBase:        ; Qua ci va l'indirizzo di base per gli Offset
  65.     dc.l    0    ; della graphics.library
  66.  
  67. OldCop:            ; Qua ci va l'indirizzo della vecchia COP di sistema
  68.     dc.l    0
  69.  
  70. ;    Questa routine agisce semplicemente sul byte YY del $dff08e in
  71. ;    copperlist, il DIWSTART; questo registro definisce l'inizio della
  72. ;    finestra video, che puo' essere "centrata", come si puo' fare
  73. ;    dalle preferences del workBench. Nel nostro caso semplicemente
  74. ;    facciamo "cominciare" la finestra video piu' in basso, per cui
  75. ;    si sposta quello che contiene. In questo caso a differenza dello
  76. ;    scroll che abbiamo visto con i bitplanes, non viene visualizzato
  77. ;    nulla "sopra" la figura, perche' spostiamo proprio la "finestra", e
  78. ;    al di fuori di essa non vengono visualizzati i bitplane.
  79. ;    Un'aspetto interessante della routine puo' essere il fatto che viene
  80. ;    usata una word etichettata come COUNTER per aspettare 35 fotogrammi
  81. ;    prima di agire, per creare un ritardo quando il logo e' in alto
  82. ;    prima di scendere; ho usato anche due istruzioni "nuove", che non
  83. ;    avevamo ancora visto, ma che sono utilissime in questa routine; si
  84. ;    tratta del BHI, che e' un'istruzione della famiglia BEQ/BNE, che salta
  85. ;    alla routine se il risultato del CMP, ossia del COMPARA, e' che
  86. ;    il valore e' SUPERIORE, in questo caso BHI.s LOGOD fa saltare a LOGOD
  87. ;    solo quando il COUNTER ha raggiunto il valore 35, nonche' le volte
  88. ;    dopo, in cui sara' a 36,37 eccetera, comunque SUPERIORE a 35.
  89. ;    L'altra istruzione e' il BCHG, che significa BIT CHANGE, ossia
  90. ;    "scambia il bit", e' della famiglia del BTST, e "scambia" il bit
  91. ;    indicato, ossia: un BCHG #1,label agisce sul bit 1 di quella label
  92. ;    facendolo diventare 1 se era 0, 0 se era 1.
  93.  
  94. SuGiuDIW:
  95.     ADDQ.W    #1,COUNTER    ; segnamo l'esecuzione
  96.     CMPI.W    #35,COUNTER    ; sono passato almeno 35 fotogrammi?
  97.     BHI.S    LOGOD        ; se si esegui la routine
  98.     RTS            ; altrimenti torna senza eseguirla
  99.  
  100. LOGOD:
  101.     BTST    #1,FLAGDIW    ; Dobbiamo andare in alto?
  102.     BEQ.S    UP        ; Se si eseguiamo la routine "UP"
  103.     SUBQ.B    #2,DIWSCX    ; Vai in alto a passi di 2, piu' velocemente
  104.     CMPI.B    #$2c,DIWSCX    ; Siamo in cima? (valore normale $2c81)
  105.     BEQ.S    CHANGEUPDOWN2    ; se si cambiamo la direzione di scroll
  106.     RTS
  107.  
  108. UP:
  109.     ADDQ.B    #1,DIWSCX    ; Vai in basso a passi di 1, lentamente
  110.     CMPI.B    #$70,DIWSCX    ; Siamo in fondo? (posizione $70)
  111.     BEQ.S    CHANGEUPDOWN    ; se si, cambiamo direzione di scorrimento
  112.     RTS
  113.  
  114. CHANGEUPDOWN
  115.     BCHG    #1,FLAGDIW    ; scambiamo il bit della direzione
  116.     RTS
  117.  
  118. CHANGEUPDOWN2
  119.     BCHG    #1,FLAGDIW    ; scambiamo il bit della direzione
  120.     CLR.W    COUNTER        ; e azzeriamo il COUNTER, siamo al termine!
  121.     RTS
  122.  
  123. FLAGDIW:
  124.     dc.w    0
  125.  
  126. COUNTER:
  127.     dc.w    0
  128.  
  129.  
  130.     SECTION    GRAPHIC,DATA_C
  131.  
  132. COPPERLIST:
  133.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 ; SPRITE
  134.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  135.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  136.     dc.w    $13e,$0000
  137.  
  138.     dc.w    $8E
  139. DIWSCX:
  140.     dc.w    $2c81    ; DIWSTRT = $YYXX Inizio finestra video
  141.  
  142.     dc.w    $90,$2cc1    ; DiwStop
  143.     dc.w    $92,$0038    ; DdfStart
  144.     dc.w    $94,$00d0    ; DdfStop
  145.     dc.w    $102,0        ; BplCon1
  146.     dc.w    $104,0        ; BplCon2
  147.     dc.w    $108,0        ; Bpl1Mod
  148.     dc.w    $10a,0        ; Bpl2Mod
  149.  
  150.             ; 5432109876543210
  151.     dc.w    $100,%0011001000000000    ; bits 13 e 12 accesi!! (3 = %011)
  152.                     ; 3 bitplanes lowres, non lace
  153. BPLPOINTERS:
  154.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  155.     dc.w $e4,$0000,$e6,$0000    ;secondo bitplane
  156.     dc.w $e8,$0000,$ea,$0000    ;terzo     bitplane
  157.  
  158.     dc.w    $0180,$000    ; color0
  159.     dc.w    $0182,$475    ; color1
  160.     dc.w    $0184,$fff    ; color2
  161.     dc.w    $0186,$ccc    ; color3
  162.     dc.w    $0188,$999    ; color4
  163.     dc.w    $018a,$232    ; color5
  164.     dc.w    $018c,$777    ; color6
  165.     dc.w    $018e,$444    ; color7
  166.  
  167.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  168.  
  169. ;    figura
  170.  
  171. PIC:
  172.     incbin    "amiga.320*256*3"    ; qua carichiamo la figura in RAW,
  173.                     ; convertita col KEFCON, fatta di
  174.                     ; 3 bitplanes consecutivi
  175.  
  176.     end
  177.  
  178.